package advanced.class02;

//进阶班————第二课（找到被指的新类型字符）
public class Code_03_FindNewTypeChar {

	public static String pointNewchar(String s, int k) {
		if (s == null || s.equals("") || k < 0 || k >= s.length()) {
			return "";
		}
		char[] chas = s.toCharArray();
		int uNum = 0;
		for (int i = k - 1; i >= 0; i--) {
			//如果不是大写，弹出
			if (!isUpper(chas[i])) {
				break;
			}
			uNum++;
		}
		// 偶数和1相与结果为0，因为最低位是0，基数与0相与==1，因为最低位是1
		if ((uNum & 1) == 1) {
			// 当前前面有奇数个大写字母是，等于左边一个拼上当前字符
			return s.substring(k - 1, k + 1);
		}
		// 否则，如果左边有偶数个大写字母，则结果为当前字符拼上右边的字符
		if (isUpper(chas[k])) {
			return s.substring(k, k + 2);
		}
		// 否则的话当前位置为小写字母，直接返回
		return String.valueOf(chas[k]);
	}

	public static boolean isUpper(char ch) {
		return !(ch < 'A' || ch > 'Z');
	}

	public static void main(String[] args) {
		String str = "aaABCDEcBCg";
		System.out.println(pointNewchar(str, 7));
		System.out.println(pointNewchar(str, 4));
		System.out.println(pointNewchar(str, 10));
		System.out.println(pointNewchar(str, 5));
	}

}
